package cct.smartmatrix.advertisement.utils;

import com.auth0.jwt.JWTSigner;
import com.auth0.jwt.JWTVerifier;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 作者：姜兆京 on 2016/11/19 13:02
 * 邮箱：763834497@qq.com
 */
@Slf4j
public class JWTUtils {
    public static String SignJWT(String userId) {
        //head头部分是默认的
        //    Sign JWT (HS256)

        final String issuer = "https://mydomain.com/";
//        你的秘钥用来签名的
        final String secret = "{{jiangzhaojing}}";
//        System.out.println(System.currentTimeMillis());
        final long iat = System.currentTimeMillis() / 1000L; // issued at claim
        final long exp = iat + 60L*60*24*30; // expires claim. In this case the token expires in 60 seconds

        final JWTSigner signer = new JWTSigner(secret);
        final HashMap<String, Object> claims = new HashMap<String, Object>();
//        claims.put("iss", issuer);//该JWT的签发者，是否使用是可选的；
        claims.put("exp", exp);//什么时候过期，这里是一个Unix时间戳，是否使用是可选的；
        claims.put("iat", iat);//在什么时候签发的(UNIX时间)，是否使用是可选的；
        //内容部分可以自己随意定义，现在开始自己的内容咯
        claims.put("userId", userId);

        final String jwt = signer.sign(claims);
        log.debug(jwt);
        return jwt;
    }

    public static String verifyJWT(String jwt) {
        //head头部分是默认的
        //    Sign JWT (HS256)

        final String secret = "{{jiangzhaojing}}";
        try {
            final JWTVerifier verifier = new JWTVerifier(secret);
            final Map<String, Object> claims = verifier.verify(jwt);

            String userId = (String) claims.get("userId");
            log.debug(claims.toString());
            return userId;
        } catch (Exception e) {
            // Invalid Token
            log.error("过期或错误的");
            return "-1";
        }
    }

    /**
     * 获取jwt token 并校验
     * */
//    public static int getTokenAndVerify(JSONObject head, UserService userService){
//        String jwt=head.optString("token");
//        int result=verifyJWT(jwt);
//        if(result==0){
//            return result;
//        }else {
//            String systemToken=userService.getUserTokenById(result);
//            if(jwt.equals(systemToken)==true){
//                return result;
//            }else {
//                return 0;
//            }
//        }
//    }
}
